package com.nuoniu.sibanyun.service.erp.in;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.nuoniu.sibanyun.entity.dto.ExistQuantityDto;
import com.nuoniu.sibanyun.entity.dto.InInventoryInfoDto;
import com.nuoniu.sibanyun.entity.dto.InInventoryInfoSearchDto;
import com.nuoniu.sibanyun.entity.dto.statistics.InventoryStorageOnHandDto;
import com.nuoniu.sibanyun.entity.dto.statistics.StorageOnHandDto;
import com.nuoniu.sibanyun.entity.erp.in.InInventoryInfo;
import com.nuoniu.sibanyun.entity.erp.in.InWarehouse;
import com.nuoniu.sibanyun.entity.inOut.VInOutRecordDetail;
import com.nuoniu.sibanyun.entity.production.ErpMrpProgramme;
import com.nuoniu.sibanyun.entity.vo.InInventoryCheckSearchVo;
import com.nuoniu.sibanyun.entity.vo.statistics.InventoryStorageOnHandVo;
import com.nuoniu.sibanyun.entity.vo.statistics.StorageOnHandVo;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;

/**
 * <p>
 * 物料信息 服务类
 * </p>
 *
 * @author 小啊刚
 * @since 2020-12-28
 */
public interface IInInventoryInfoService extends IService<InInventoryInfo> {

    /**
     * 根据仓库获取物料
     * @author 小啊刚
     * @date 2020-12-29
     */
    InInventoryInfo getByInventory(VInOutRecordDetail inOutRecordDetail);

    Page<InInventoryInfo> pageList(Page page, InInventoryInfoDto inInventoryInfoDto);

    /**
     * 盘点业务 查询现存量
     * @param page
     * @param inInventoryInfoSearchDto
     * @return
     */
    Page<InInventoryCheckSearchVo> pageInInventoryCheckSearchVo(Page page, InInventoryInfoSearchDto inInventoryInfoSearchDto);

    /**
     * @title 盘点业务 查询现存量（单个查询）
     * @description
     * @author 白强
     * @updateTime 2021/12/31 11:40
     * @throws
     */
    InInventoryCheckSearchVo inInventoryCheckSearchVo(Long warehouseId,String inventoryCode);

    /**
     * 获取
     * @param
     * @return
     */
    HashMap<String,Object> getExistingQuantityReport();

    /**
     * 获取物料库存MRP
     * @author 小啊刚
     * @date 2021-03-18
     */
    Double getInventoryCount(Integer inventoryId, ErpMrpProgramme mrpProgramme);

    /**
     * 根据 物料ID  获取现存量(所有仓库)
     * @param inventoryId
     * @return
     */
    BigDecimal getExistQuantity(Integer inventoryId);

    /**
     * 根据 物料ID 和 仓库ID  获取现存量
     * @return
     */
    HashMap<Integer, BigDecimal> getExistQuantityByWarehouseId(ExistQuantityDto existQuantityDto);

    /**
     * 统计 现存量
     * @param storageOnHandDto
     * @return
     */
    Page<StorageOnHandVo> statisticStorageOnHandVo(Page page,StorageOnHandDto storageOnHandDto);


    /**
     * 现存量 看板统计
     * @param inventoryStorageOnHandDto
     * @return
     */
    List<InventoryStorageOnHandVo> statisticInventoryStorageOnHandVo(InventoryStorageOnHandDto inventoryStorageOnHandDto);


    /**
     * 更新 仓库名称
     * @param inWarehouse
     */
    void updateFromInWarehouse(InWarehouse inWarehouse);

    /**
     * 获取物料现存量
     * @author 小啊刚
     * @date 2022-01-07
     */
    Double getInventorySum(Integer inventoryId, Integer companyId);
}
